package _0_5_编辑距离

/*
*
原题链接:
https://leetcode.cn/problems/maximum-subarray/

53. 最大子数组和
给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。

子数组 是数组中的一个连续部分。

示例 1：
输入：nums = [-2,1,-3,4,-1,2,1,-5,4]
输出：6
解释：连续子数组 [4,-1,2,1] 的和最大，为 6 。

示例 2：
输入：nums = [1]
输出：1
示例 3：

输入：nums = [5,4,-1,7,8]
输出：23
*/
func maxSubArray(nums []int) int {

	n := len(nums) //获取数组长度

	dp := make([]int, n) //准备dp数组
	dp[0] = nums[0]

	mx := nums[0] //最大值
	for i := 1; i < n; i++ {
		dp[i] = max(dp[i-1]+nums[i], nums[i]) //比较, 是否需要加上之前的dp[i-1]
		mx = max(mx, dp[i])
	}

	return mx
}
